<?php
/**
 * 文件或者文件夹处理类
 * @author chengtao05011633@gmail.com
 * @veasion 0.0.1
 */
class CtFile{
	/**
	 * 文件路径
	 */
	protected $file = null;
	protected $file_exist = null;
	protected $is_dir = null;
	protected $file_size = 0;
	protected $last_error = '';
	protected $is_file = null;
	protected $file_ext = null;
	private $mime = null;
	/**
	 * 构造函数
	 * @param $file 文件真实路径
	 */
	public function __construct($file){
		$this->file = $file;
		$this->file_exist = file_exists($this->file);
		if($this->file_exist){
			if(is_dir($this->file)){
				$this->is_dir = true;
				$this->is_file = false;
			}else{
				$this->is_dir = false;
				$this->is_file = true;
			}
		}else{
			$this->is_dir = false;
			$this->is_file = false;
		}
		if($this->file_exist && !$this->is_dir){
			$this->file_size = filesize($this->file);
		}

	}
	/**
	 * 获取文件尺寸
	 */
	public function getFileSize(){
		$return = false;
		if(!$this->file_exist){
			$this->setError("File {$this->file} is not exist!");
		}elseif($this->is_dir){
			$this->setError("File {$this->file} is a dir !");
		}else{
			$return = $this->file_size;
		}
		return $return;
	}
	/**
	 * 删除文件
	 */
	public function delFile(){
		if($this->isFile()){
			unlink($this->file);
		}
	}
	/**
	 * 获取操作的最后一条错误信息
	 */
	public function getError(){
		return $this->error;
	}
	/**
	 * 设置错误信息
	 */
	protected function setError($error){
		$this->last_error = $error;
	}
	/**
	 * 获取资源是否是文件
	 */
	public function isFile(){
		return $this->is_file;
	}
	/**
	 * 通过http方式上传文件
	 */
	public function httpUpload(){
		include_once 'CtHttp.class.php';
	}
	/**
	 * 获取文件扩展名
	 */
	public function getExt(){
		if($this->file_ext == null){
			$this->file_ext =  strtolower(end(explode('.',$this->file)));
		}
		return $this->file_ext;
	}
	/**
	 * 获取文件的类型
	 */
	public function getMime(){
		if(!$this->mime && $this->isFile()){
			if(function_exists('mime_content_type')){
				$this->mime = mime_content_type($this->file);
			}elseif(function_exists('finfo_open')){
				$finfo = finfo_open(FILEINFO_MIME_TYPE); 
				$this->mime = finfo_file($finfo, $this->file);
				finfo_close($finfo);
			}else{
				throw new Exception("Can not get file mime."); 
			}
		}
		return $this->mime;
	}
	/**
	 * 获取文件绝对路径
	 */
	public function getAbsolutePath(){
		return realpath($this->file);
	}
	/**
	 * 遍历创建目录
	 */
	public static function mkdir($dir) {
        static $_dir; // 记录需要建立的目录
        if (!is_dir($dir)) {
            if (empty($_dir))
                $_dir = $dir;
            if (!is_dir(dirname($dir))) {
                CtFile::mkdir(dirname($dir));
            } else {
                mkdir($dir);
                if (!is_dir($_dir)) {
                    CtFile::mkdir($_dir);
                } else {
                    $_dir = "";
                }
            }
        }
    }
}